import pygame
import sys
import random

# 初始化pygame
pygame.init()

# 设置屏幕大小
screen_width = 640
screen_height = 480
screen = pygame.display.set_mode((screen_width, screen_height))

BG_IMAGE_PATH='C:\\Users\lenovo\OneDrive\Pictures\Camera Roll\微信图片_20240401114834.jpg'
bg_image=pygame.image.load(BG_IMAGE_PATH).convert_alpha()
# 设置游戏速度
clock = pygame.time.Clock()
speed = 5

# 定义蛇和食物的大小
block_size = 20

# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# 蛇的初始位置
snake_pos = [[100, 100], [80, 100], [60, 100]]

# 食物的初始位置
food_pos = [300, 300]


# 定义一个函数，名为draw_snake，它接受一个参数snake_pos，表示蛇的位置列表
def draw_snake(snake_pos):
    # 遍历snake_pos列表中的每一个位置
    for pos in snake_pos:
        # 使用pygame的draw.rect函数在屏幕上绘制一个矩形
        # 矩形的颜色由变量GREEN定义，通常是一个表示绿色的元组，例如(0, 255, 0)
        # pygame.Rect定义矩形的位置和大小，pos[0]和pos[1]是矩形左上角的坐标
        # block_size定义矩形的宽度和高度，表示蛇的每个部分的大小
        pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], block_size, block_size))

# 使用pygame库在屏幕上绘制食物。
def draw_food(food_pos):
    pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], block_size, block_size))
# 更新蛇的位置，使其根据给定的方向移动。
def move_snake(snake_pos, direction):
    x, y = snake_pos[0]
    if direction == 'right':
        x += block_size
    elif direction == 'left':
        x -= block_size
    elif direction == 'up':
        y -= block_size
    elif direction == 'down':
        y += block_size
    snake_pos.insert(0, [x, y])
    snake_pos.pop()
# 检查蛇的头部是否与食物的位置重合，从而判断蛇是否成功吃到食物。
def check_collision(snake_pos, food_pos):
    if snake_pos[0] == food_pos:
        return True
    # return False
# 生成食物的位置，确保这个位置不在蛇的当前位置上，以避免蛇立即吃到新生成的食物，增加游戏的挑战性。
def generate_food(snake_pos):
    while True:
        x = random.randrange(0, screen_width, block_size)
        y = random.randrange(0, screen_height, block_size)
        if [x, y] not in snake_pos:
            return [x, y]
# 检查蛇是否碰到了游戏边界或者自己的身体，从而判断游戏是否结束。
def check_game_over(snake_pos):
    x, y = snake_pos[0]
    if x < 0 or x >= screen_width or y < 0 or y >= screen_height or snake_pos[0] in snake_pos[1:]:
        return True
    return False

direction = 'right'
#主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and direction != 'down':
                direction = 'up'
            elif event.key == pygame.K_DOWN and direction != 'up':
                direction = 'down'
            elif event.key == pygame.K_LEFT and direction != 'right':
                direction = 'left'
            elif event.key == pygame.K_RIGHT and direction != 'left':
                direction = 'right'

    move_snake(snake_pos, direction)

    if check_collision(snake_pos, food_pos):
        food_pos = generate_food(snake_pos)
        snake_pos.append(snake_pos[-1])

    if check_game_over(snake_pos):
        break

    screen.fill(WHITE)
    draw_snake(snake_pos)
    draw_food(food_pos)
    pygame.display.flip()
    clock.tick(speed)

pygame.quit()